// 方法重载的优势：
//      结构分明
//      各司其职，自动提示方法和属性
//      更利于功能扩展

//   实现按id查找和按type 查找的 查询方法   
type MessageType = "image" | "audio";

type Message = {
    id: number;
    type: MessageType;
    sendmessage: string;
};

let messages: Message[] = [
    //let messages: Array<Message> = [
    {
        id: 1, type: 'image', sendmessage: "你好啊,今晚咱们一起去三里屯吧",
    },
    {
        id: 2, type: 'audio', sendmessage: "朝辞白帝彩云间，千里江陵一日还"
    },
    {
        id: 3, type: 'audio', sendmessage: "你好！张无忌"
    },
    {
        id: 4, type: 'image', sendmessage: "刘老根苦练舞台绝技！"
    },
    {
        id: 5, type: 'image', sendmessage: "今晚王牌对王牌节目咋样?"
    }]

function getMessage(id: number): Message
function getMessage(type: MessageType): Message[]
function getMessage(value: any): Message | Message[] | undefined {
    if (typeof value === "number") {
        return messages.find((msg) => { return value === msg.id })
    } else {
        return messages.filter((msg) => { return value === msg.type })
    }
}

// let messge = getMessage(2);
let message = getMessage('image')
console.log(message);


// 方法重载规则：

// 可以有多个重载签名，但只能有一个实现签名

// 实现签名必须包含重载签名的所有参数和返回值

// 调用是调用重载签名， 实现签名是在代码运行时，由重载签名调用实现签名来实现